package com.huangsm.book.designmodel.parallel.future;

/**
 * FutureData实现了一个快速返回的RealData包装。它只是一个包装，或者说是一个RealData的虚拟实现。
 * 因此，他可以很快构造并返回。当使用Future的getResult()方法时，程序会阻塞，等待RealData被注入到程序中，才使用RealData的
 * getResult()方法返回。
 * @author huang
 * @date 2019/2/18
 */
public class FutureData  implements Data{
    protected RealData realData=null;
    protected boolean isReady=false;
    public synchronized void  setRealData(RealData realData){
        if (isReady){
            return;
        }
        this.realData=realData;
        isReady=true;
        //RealData已经被注入，通知getResult()
        notifyAll();
    }
    @Override
    public String getResult() {
        while (!isReady){
            try {
                wait();
            }catch (InterruptedException e){

            }
        }
        return realData.result;
    }
}
